﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Jayden.Dll.Core.Persistence.Attributes;
using Jayden.Dll.Core.Persistence;

namespace Jayden.Dll.Cards.Poker
{
	[Table]
	public class TexasHoldemPlayerStatistics : ObjectBase
	{
		private string m_ProviderName;
		private long m_PlayerBalance;
		private string m_PlayerName;
		private DateTime m_LastChanges;
		private ulong m_BigBlind;
		private string m_Currency;
		private ulong m_HandCount;
		private ulong m_Won;
		private ulong m_SF; // see flop
		private ulong m_VPIP; // valuntary put $ in the pot
		private ulong m_PFR; // pre flop raise
		private ulong m_WWSF; // win $ when see flop
		private ulong m_WTSD; // went to show down
		private ulong m_WSD; // win $ show down
		private ulong m_Bet3;
		private ulong m_Bet4;
		private ulong m_CCPF; // cold call pre flop
		private ulong m_CBetFlop;
		private TexasHoldemHandRangeList m_HandRangeList = new TexasHoldemHandRangeList();

		public TexasHoldemPlayerStatistics(UnitOfWork uow)
			: base(uow, 0)
		{

		}

		[Field(PrimaryKey = true, AutoIncrement = true)]
		public long TexasHoldemPlayerStatisticsId { get { return (long)ObjectId[0]; } set { ObjectId[0] = value; } }
		[Field]
		public string ProviderName { get { return m_ProviderName; } set { m_ProviderName = value; } }
		[Field]
		public string PlayerName { get { return m_PlayerName; } set { m_PlayerName = value; } }
		[Field]
		public ulong BigBlind { get { return m_BigBlind; } set { m_BigBlind = value; } }
		[Field]
		public long PlayerBalance { get { return m_PlayerBalance; } set { m_PlayerBalance = value; } }
		[Field]
		public string Currency { get { return m_Currency; } set { m_Currency = value; } }
		[Field]
		public DateTime LastChanges { get { return m_LastChanges; } set { m_LastChanges = value; } }
		[Field]
		public ulong HandCount { get { return m_HandCount; } set { m_HandCount = value; } }
		[Field]
		public ulong Won { get { return m_Won; } set { m_Won = value; } }
		[Field]
		public ulong SF { get { return m_SF; } set { m_SF = value; } }
		[Field]
		public ulong VPIP { get { return m_VPIP; } set { m_VPIP = value; } }
		[Field]
		public ulong PFR { get { return m_PFR; } set { m_PFR = value; } }
		[Field]
		public ulong Bet3 { get { return m_Bet3; } set { m_Bet3 = value; } }
		[Field]
		public ulong Bet4 { get { return m_Bet4; } set { m_Bet4 = value; } }
		[Field]
		public ulong WWSF { get { return m_WWSF; } set { m_WWSF = value; } }
		[Field]
		public ulong WTSD { get { return m_WTSD; } set { m_WTSD = value; } }
		[Field]
		public ulong WSD { get { return m_WSD; } set { m_WSD = value; } }
		[Field]
		public ulong CCPF { get { return m_CCPF; } set { m_CCPF = value; } }
		[Field]
		public ulong CBetFlop { get { return m_CBetFlop; } set { m_CBetFlop = value; } }
		[Field]
		public string HandRange
		{
			get { return m_HandRangeList.ToString(); }
			set { m_HandRangeList = TexasHoldemHandRangeList.Parse(value); }
		}

		public TexasHoldemHandRangeList HandRangeList { get { return m_HandRangeList; } }
	}
}
